/*
 * @Author: 0x9DEFA478
 * @Date: 2021-09-24 16:41:21
 * @LastEditTime: 2021-12-17 23:08:30
 * @LastEditors: 0x9DEFA478
 * @Description: 
 * QQ:2652450237
 * ============================================================================================================================================
 * 
 * 
 * 
 *                                                                                               ************      ****************************
 *                                                                                             ************      ****************************  
 *                                                                                           ************      ****************************    
 *                                                                                         ************      ****************************      
 *                                                                                       ************      ************                        
 *                                                                                     ************      ************                          
 *                                                                                   ************      ************                            
 *                                                                                 ************      ************                              
 *                                                                               ************      ************                                
 *                                                                             ************      ************                                  
 *                                                                           ************      ************                                    
 *                                                                         ************      ************                                      
 *                                                                       ************      ************                                        
 *                                                                     ************      ************                                          
 *                                                                   ************      ************                                            
 *                                                                 ************      ************                                              
 *                                                               ************      ************                                                
 *                                                             ************      ************                                                  
 *                                                           ************      ************                                                    
 *                                                         ************      ************                                                      
 *                                                       ************      ************                                                        
 *                                                     ************      ************                                                          
 *                                                   ************      ************                                                            
 *                                                 ************      ************                                                              
 *                                               ************      ************                                                                
 *                                             ************      ************                                                                  
 *                                           ************      ************                                                                    
 *                                         ************      ************                                                                      
 *                                       ************      ************                                                                        
 *                                     ************      ************                                                                          
 *                                   ************      ************                                                                            
 *                                 ************      ************                                                                              
 *                               ************      ************                                                                                
 *                             ************      ************                                                                                  
 *                           ************      ************                                                                                    
 *                         ************      ************                                                                                      
 *       ****************************      ************                                                                                        
 *     ****************************      ************                                                                                          
 *   ****************************      ************                                                                                            
 * ****************************      ************                                                                                              
 * 
 * 
 * 
 * ============================================================================================================================================
 * 
 */
#include "IP_LTDC.h"





/**
 * @brief 事件中断调用
 * @param ip_ltdc ltdc句柄
 * @return 无
 */
void IP_LTDC_Event_IrqCallback(IP_LTDC* ip_ltdc){
  IP_LTDC_SetBitmapRequest* Request;
  IP_LTDC_SetBitmapRequest* NowRequest;
  unsigned int isr;
  int i;
  int isUpdate;

  isr=ip_ltdc->Instance.Instence->ISR;
  ip_ltdc->Instance.Instence->ICR=LTDC_ICR_CRRIF|LTDC_ICR_CLIF;

  if((isr&LTDC_ISR_LIF)!=0){
    ip_ltdc->PhysicalFrameCount++;

    isUpdate=0;

    for(i=0;i<vIP_LTDC_NumOfLayer;i++){
      Request=&ip_ltdc->Request[i].Request;
      NowRequest=&ip_ltdc->Request[i].NowRequest;
      
      if(NowRequest->Bitmap!=NULL){
        
        NowRequest->DoneCallback(NowRequest->DoneCallback_v);

        if(Request->Bitmap!=NULL){
          NowRequest[0]=Request[0];
          Request->Bitmap=NULL;

          ip_ltdc->RealFrameCount++;
          ((LTDC_Layer_TypeDef *)((unsigned int)(((unsigned int)(ip_ltdc->Instance.Instence)) + 0x84U + (0x80U*i))))->CFBAR=(unsigned int)NowRequest->Bitmap;
          isUpdate=-1;

          Request->LoadCallback(Request->LoadCallback_v);
        }else{
          NowRequest->Bitmap=NULL;
        }
      }else{
        if(Request->Bitmap!=NULL){
          NowRequest[0]=Request[0];
          Request->Bitmap=NULL;

          ip_ltdc->RealFrameCount++;
          ((LTDC_Layer_TypeDef *)((unsigned int)(((unsigned int)(ip_ltdc->Instance.Instence)) + 0x84U + (0x80U*i))))->CFBAR=(unsigned int)NowRequest->Bitmap;
          isUpdate=-1;

          Request->LoadCallback(Request->LoadCallback_v);
        }
      }
    }

    if(isUpdate!=0){
      ip_ltdc->Instance.Instence->SRCR|=LTDC_SRCR_IMR;
    }

  }
}

/**
 * @brief 错误中断调用
 * @param ip_ltdc ltdc句柄
 * @return 无
 */
void IP_LTDC_Error_IrqCallback(IP_LTDC* ip_ltdc){
  unsigned int isr;

  isr=ip_ltdc->Instance.Instence->ISR;
  ip_ltdc->Instance.Instence->ICR=LTDC_ICR_CTERRIF|LTDC_ICR_CFUIF;
  
  if((isr&LTDC_ICR_CFUIF)!=0){
    ip_ltdc->FUDERRIF_Count++;
  }
}

/**
 * @brief 中断调用 不能与IP_LTDC_Event_IrqCallback()或IP_LTDC_Event_IrqCallback()中断调用
 * @param ip_ltdc ltdc句柄
 * @return 无
 */
void IP_LTDC_IrqCallback(IP_LTDC* ip_ltdc){

  IP_LTDC_Event_IrqCallback(ip_ltdc);
  IP_LTDC_Error_IrqCallback(ip_ltdc);

}

/**
 * @brief 设置显示的缓存
 * @param ip_ltdc ltdc句柄
 * @param LayerIndex 设置的层
 * @param Bitmap 位图的地址
 * @param DoneCallback 当Bitmap被新的缓存代替(即Bitmap被释放了)后被调用
 * @param DoneCallback_v DoneCallback被调用时传入的参数
 * @param LoadCallback 当Bitmap加载后 该方法被调用
 * @param LoadCallback_v LoadCallback被调用时传入的参数
 * @return 0:成功 其他:失败
 */
int IP_LTDC_SetBitmap(IP_LTDC* ip_ltdc,int LayerIndex,void* Bitmap
  ,void (*DoneCallback)(void*),void* DoneCallback_v
  ,void (*LoadCallback)(void*),void* LoadCallback_v){

  IP_LTDC_SetBitmapRequest* Request;

  Request=&ip_ltdc->Request[LayerIndex].Request;

  if(Request->Bitmap!=NULL){
    return -1;
  }

  Request->LoadCallback_v=LoadCallback_v;
  Request->LoadCallback=LoadCallback;
  Request->DoneCallback_v=DoneCallback_v;
  Request->DoneCallback=DoneCallback;
  Request->Bitmap=Bitmap;

  return 0;
}



